/*
 * @Author: master
 * @Date: 2022-04-06 18:13:33
 * @LastEditTime: 2022-08-03 10:58:07
 * @Description: vite的通用钩子
 */
const { exec } = require('child_process'); // 压缩服务
const { copyFile, mkdirDirectory, zipFolderServer, colors } = require('../node/util.js'); // node服务工具
const path = require('path'); // 路径服务
const viteHookPlugin = viteConfig => {
  /**
   * 设置项目的config.js文件
   */
  const setProConfig = () => {
    setTimeout(() => {
      // 创建目录
      mkdirDirectory(path.join(__dirname, '../..', `dist/${viteConfig.name}/config`));
      // 配置文件的拷贝
      copyFile(
        `${viteConfig.root}/config/system.${viteConfig.nodeEnv}.config.js`,
        path.join(__dirname, '../..', `dist/${viteConfig.name}/config/system.config.js`),
        () => {
          // 执行项目打包完成之后的压缩服务
          proZip();
        },
      );
    }, 1000);
  };
  /**
   * 执行项目打包完成之后的压缩服务
   */
  const proZip = () => {
    console.log(colors('green'), '正在压缩...');
    // 打包完成的目录地址
    const distProUrl = path.join(__dirname, '../..', `dist/${viteConfig.name}`);
    zipFolderServer(distProUrl, `${viteConfig.name}.zip`, () => {
      console.log(colors('green'), '压缩完成!');
      console.log(colors('green'), `打包输出的项目地址：`);
      console.log(colors('green'), `${distProUrl}`);
    });
  };
  /**
   * 打开打包完成的文件目录
   */
  const openDistPro = () => {
    // dist的目录地址
    const distUrl = path.join(__dirname, '../..', `dist`);
    /**
     * 打开dist项目目录
     */
    // centos系统
    if (process.platform === 'darwin') {
      exec(`open ${distUrl}`);
    } else {
      // windows系统
      exec(`explorer ${distUrl}`, (error, stdout, stderr) => {
        if (error) {
          console.error(`exec error: ${error}`);
          return;
        }
        console.log(`stdout: ${stdout}`);
        console.error(`stderr: ${stderr}`);
      });
    }
  };
  return {
    // 必须的，将会显示在 warning 和 error 中
    name: 'vite-hook-plugin',
    // 构建开始
    buildStart: () => {
      console.log(colors('green'), '开始打包...');
    },
    // 构建完成
    buildEnd: () => {
      console.log(colors('green'), '打包成功!');
    },
    // 关闭构建
    closeBundle: () => {
      // 设置项目的config.js文件
      setProConfig();
      // 打开打包完成的文件目录
      openDistPro();
    },
  };
};
export default viteHookPlugin;
